/**
 * 路由拦截，通常也是登录拦截
 * 设置了路由白名单，或者黑名单，看业务需要选哪一个
 */
import { useUserStore } from '@/store'

// TODO Check
// 不用登陆就可以访问的白名单，通常为登陆注册页面
const whitePageList = ['/pages/login/login', '/pages/login/register', '/pages/login/findPw']
const loginRoute = '/pages/login/login'

const isLogined = () => {
  const userStore = useUserStore()
  return userStore.isLogined
}

// 黑名单登录拦截器 - （适用于大部分页面不需要登录，少部分页面需要登录）
const navigateToInterceptor = {
  // 注意，这里的url是 '/' 开头的，如 '/pages/index/index'，跟 'pages.json' 里面的 path 不同
  invoke({ url }: { url: string }) {
    console.log(url) // /pages/route-interceptor/index?name=feige&age=30
    const path = url.split('?')[0]
    const isNeedLogin = !whitePageList.includes(path)
    // 不需要登录的页面
    if (!isNeedLogin) {
      console.log('不需要登录,不拦截')
      return true
    }
    console.log('需要登录,拦截,检查是否登录')
    // 若本页面需要登录则验证登陆状态
    const hasLogin = isLogined()
    if (hasLogin) {
      console.log('已登录,不拦截')
      return true
    } else {
      // 没登陆就跳转到登陆页面
      console.log('未登录,拦截并跳转到登陆页面')
      const redirectRoute = `${loginRoute}?redirect=${encodeURIComponent(url)}`
      uni.reLaunch({ url: redirectRoute })
    }
    return false
  },
}

export const routeInterceptor = {
  install() {
    uni.addInterceptor('navigateTo', navigateToInterceptor)
    uni.addInterceptor('reLaunch', navigateToInterceptor)
    uni.addInterceptor('redirectTo', navigateToInterceptor)
    uni.addInterceptor('switchTab', navigateToInterceptor)
  },
}
